package database

import (
	"fmt"
	"x-admin/backend/internal/modules/permission"
	"x-admin/backend/internal/modules/role"
	"x-admin/backend/internal/modules/upload"
	"x-admin/backend/internal/modules/user"
	"x-admin/backend/pkg/migrate"

	"gorm.io/gorm"
)

// AutoMigrateNew 新的模块化数据库迁移
func AutoMigrateNew(db *gorm.DB) error {
	fmt.Println("开始执行模块化数据库迁移...")

	// 创建迁移管理器
	manager := migrate.NewMigrationManager(db)

	// 注册各个模块的迁移器
	manager.RegisterMigrator(permission.NewPermissionMigrator())
	manager.RegisterMigrator(role.NewRoleMigrator())
	manager.RegisterMigrator(user.NewUserMigrator())
	manager.RegisterMigrator(upload.NewUploadMigrator())

	// 执行迁移
	if err := manager.AutoMigrate(); err != nil {
		return fmt.Errorf("数据库迁移失败: %w", err)
	}

	fmt.Println("模块化数据库迁移完成")
	return nil
}

// InitDataNew 新的模块化数据初始化
func InitDataNew(db *gorm.DB) error {
	fmt.Println("开始执行模块化数据初始化...")

	// 创建迁移管理器
	manager := migrate.NewMigrationManager(db)

	// 注册各个模块的迁移器
	manager.RegisterMigrator(permission.NewPermissionMigrator())
	manager.RegisterMigrator(role.NewRoleMigrator())
	manager.RegisterMigrator(user.NewUserMigrator())
	manager.RegisterMigrator(upload.NewUploadMigrator())

	// 执行数据初始化
	if err := manager.SeedData(); err != nil {
		return fmt.Errorf("数据初始化失败: %w", err)
	}

	fmt.Println("模块化数据初始化完成")
	return nil
}
